package com.yfp.client.service;

import com.yfp.client.domain.Machine;
import com.yfp.client.domain.OrderCombo;
import com.yfp.client.domain.OrderDetail;
import com.yfp.client.domain.OrderList;
import com.yfp.client.domain.dto.AppletComboInfoDto;
import com.yfp.client.domain.vo.DeviceInfoVO;
import com.yfp.client.domain.vo.MachineComboVO;
import com.yfp.client.domain.vo.MachineVo;
import com.yfp.client.domain.vo.MarCouponPackShopVO;

import java.util.List;

/**
 * @Description: 设备service
 *
 * @CreateDate: 2024/5/24 9:48
 * @UpdateUser:
 * @UpdateDate: 2024/5/24 9:48
 * @UpdateRemark: 暂无修改
 * @Version: 1.0
 */
public interface MachineService {
    /**
     * 查询客户收藏设备
     *
     * @param clientId    客户ID
     * @param latitude    纬度
     * @param longitude   经度
     * @param machineName 设备名称
     * @param machineId   设备ID
     * @return
     */
    List<MachineVo> findMachines(String clientId, String latitude, String longitude, String machineName, String machineId);


    /**
     * 根据设备id查询
     *
     * @param machineIds
     * @return
     */
    List<DeviceInfoVO> getByIds(List<String> machineIds);


    Machine findByMachineId(String machineId);

    /**
     * 获取设备套餐列表
     *
     * @param machineId
     * @return
     */
    MachineComboVO machineComboList(String machineId);

    /**
     * 套餐详情数据
     *
     * @param comboIdList 套餐id列表
     * @return {@link List}<{@link AppletComboInfoDto}>
     */
    List<AppletComboInfoDto> comboDetailData(List<String> comboIdList);

    /**
     * 是否营业
     *
     * @param machineId 机器id
     * @return {@link Boolean}
     */
    Boolean isBusinessOpenByMachineId(String machineId);

    /**
     * 通知设备支付状态
     *
     * @param orderCombo   订单套餐
     * @param orderDetails 订单详情
     * @param orderLists   订单列表
     */
    void notifyDevicePayStatus(OrderCombo orderCombo, List<OrderDetail> orderDetails, List<OrderList> orderLists);

    /**
     * 查询社群二维码
     *
     * @param machineId
     * @return
     */
    String findMarAssociationQrCode(String machineId);

    /**
     * 查询设备
     *
     * @param positionIds
     * @return
     */
    List<Machine> findByPositionIdIn(List<String> positionIds);

    /**
     * 查询卡包销售套餐列表
     *
     * @return
     */
    List<MarCouponPackShopVO> couponPackList(String cityName);

    /**
     * 获取最近设备的点位id
     * @param latitude
     * @param longitude
     * @return
     */
    MachineVo shortDistancePositionId(String latitude, String longitude);
}
